package com.veer.shop.utils;

import java.util.List;
import java.util.Map;

import com.veer.shop.config.ResponseCodeEnum;
import com.veer.shop.pojo.ResponseData;
import com.veer.shop.pojo.ResponseList;

/**
 * 统一返回数据工具类
 * 
 * @author Wangbin
 * 2020年8月12日-下午3:20:32
 */
public class ResponseUtil {
	
	/**
	 * 返回成功并携带单个数据
	 * 
	 * @param data 数据对象
	 * @return
	 */
	public static <T> ResponseData<?> success(T data) {
		return new ResponseData<T>(ResponseCodeEnum.SUCCESS, data);
	}
	
	/**
	 * 返回成功并携带列表数据
	 * 
	 * @param count 总记录数
	 * @param data 数据对象
	 * @return
	 */
	public static <T> ResponseData<?> successList(Long count, T data) {
		Map<String, Object> listResultMap = InitUtil.initListResultMap();
		listResultMap.put("count", count);
		listResultMap.put("list", data);
		return new ResponseData<Map<String, Object>>(ResponseCodeEnum.SUCCESS, listResultMap);
	}
	
	/**
	 * 返回成功并携带自定义的提示
	 * 
	 * @param message
	 * @return
	 */
	public static <T> ResponseData<?> success(String message) {
		return new ResponseData<T>(ResponseCodeEnum.SUCCESS, message);
	}
	
	/**
	 * 返回成功 使用系统统一的成功枚举 SUCCESS
	 * 
	 * @return
	 */
	public static <T> ResponseData<?> success() {
		return new ResponseData<T>(ResponseCodeEnum.SUCCESS);
	}
	
	/**
	 * 返回失败不携带数据 使用定义的错误提示枚举
	 * 
	 * @param responseCodeEnum
	 * @return
	 */
	public static <T> ResponseData<?> error(ResponseCodeEnum responseCodeEnum) {
		return new ResponseData<T>(responseCodeEnum);
	}
	
	/**
	 * 返回失败不携带数据 使用系统错误提示枚举 ERROR
	 * 
	 * @param responseCodeEnum
	 * @return
	 */
	public static <T> ResponseData<?> error() {
		return new ResponseData<T>(ResponseCodeEnum.ERROR);
	}
	
	/**
	 * 返回失败不携带数据 错误码使用系统定义的 ERROR，提示信息自定义
	 * 
	 * @param message
	 * @return
	 */
	public static <T> ResponseData<?> error(String message) {
		return new ResponseData<T>(ResponseCodeEnum.ERROR.getCode(), message);
	}
	
	public static <T> ResponseList<?> getResponseList(Long count, List<T> data) {
		return new ResponseList<T>(count, data);
	}
}
